import type { VNode } from "vue";

export namespace TableType {
  export interface Props<T> {
    title?: string;
    rowKey?: string;
    data: T[];
    columns: TableType.TableItem[];
    maxHeight?: number | string;
    searchConfig?: {};
    requestApi?: (params: any) => Promise<any>; // 请求表格数据的 api ==> 非必传
    requestError?: (params: any) => void; // 表格 api 请求错误监听 ==> 非必传
    dataCallback?: (data: any) => any; // 返回数据的回调函数，可以对数据进行处理 ==> 非必传
    initParam?: any; // 初始化请求参数 ==> 非必传（默认为{}）
    pagination?: boolean; // 是否需要分页组件 ==> 非必传（默认为true）
    toolButton?: boolean;
  }

  interface TableItem_Item {
    type?: "selection" | "index" | "expand";
    align?: "left" | "center" | "right";
    reserveSelection?: boolean; // 数据刷新后是否保留选项，仅对 type=selection 有效
    showOverflowTooltip?: boolean; // 单行显示，多余的内容会在 hover 时以 tooltip 的形式显示出来
    render?: (v: any) => VNode; // 内容 h 函数
    headerRender?: (v: any) => VNode; // 头部 h 函数
  }
  export interface TableItem {
    prop?: string;
    label?: string;
    tableItem?: TableItem_Item;
    searchItem?: {};
  }
}
